package com.ruoyi.system.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 施工项目DO（对应t_construction_project表）
 */
@Data
@TableName("t_construction_project")
public class ConstructionProjectDO {

    /** 主键ID */
    @TableId(type = IdType.AUTO)
    private Long id;

    /** 施工编号（规则：SG + 年份 + 6位流水号，如 SG2025000001） */
    @TableField("project_code")
    private String projectCode;

    /** 绑定的立项项目编号（双向绑定） */
    @TableField("approval_project_code")
    private String approvalProjectCode;

    /** 工地项目名称（如“XX小区A户型精装”） */
    @TableField("project_name")
    private String projectName;

    /** 客户姓名 */
    @TableField("customer_name")
    private String customerName;

    /** 客户联系方式（手机号） */
    @TableField("customer_phone")
    private String customerPhone;

    /** 工地详细地址（精确到门牌号） */
    @TableField("project_address")
    private String projectAddress;

    /** 开工日期（需≥当前日期） */
    @TableField("start_date")
    private LocalDate startDate;

    /** 预计入住日期（需>开工日期） */
    @TableField("expected_checkin_date")
    private LocalDate expectedCheckinDate;

    /** 项目状态：1-进行中，2-暂停 */
    @TableField("project_status")
    private Integer projectStatus;

    /** 暂停原因（仅状态为“暂停”时填写） */
    @TableField("pause_reason")
    private String pauseReason;

    /** 备注（特殊施工要求等） */
    @TableField("remark")
    private String remark;

    /** 当前阶段ID（关联t_construction_stage表） */
    @TableField("current_stage_id")
    private Long currentStageId;

    /** 当前阶段名称（冗余存储） */
    @TableField("current_stage_name")
    private String currentStageName;

    /** 创建人 */
    @TableField(value = "create_by", fill = FieldFill.INSERT)
    private String createBy;

    /** 创建时间 */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /** 更新人 */
    @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
    private String updateBy;

    /** 更新时间 */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /** 逻辑删除：0-未删除，1-已删除 */
    @TableLogic
    @TableField("is_deleted")
    private Integer isDeleted;

    @TableField(exist = false)
    private ConstructionProjectItemDO projectItem;
}